﻿#region Copyright & licence

// This file is part of Refix.
// 
// Refix is free software: you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
// 
// Refix is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Lesser General Public License for more details.
// 
// You should have received a copy of the GNU Lesser General Public
// License along with Refix.  If not, see <http://www.gnu.org/licenses/>.
// 
// Copyright (C) 2010-11 David Musgrove and others.

#endregion

using System;
using System.Collections.Generic;
using System.Reflection;

namespace Refix.Core.Repository
{
    public interface ILocalRepository
    {
        string BaseDirectory { get; }
        bool Contains(string assemblyName);
        string GetAssemblyVersionFolder(Assembly assembly);
        Component GetComponent(string assemblyName);
        Component GetComponent(string assemblyName, bool download);
        byte[] GetComponentVersionZipFile(string assemblyName, string version);
        ComponentVersion GetComponentVersion(string assemblyName, string version);
        ComponentVersion GetComponentVersion(string assemblyName, string version, bool download);
        bool UploadToRemoteRepository(string assemblyName, string version);

        int SaveFiles(IEnumerable<Reference> assemblyBindingRedirects, string assemblyName, string version,
                                      string clrVersion, string folder);

        void PutComponent(Component component, bool incrementLocalRevision);
        void BackupVersionFile(Component component);
        void PutComponent(Component component);
        void RemoveAssembly(Component component, string version);
        void PutExternalReferences(Assembly assembly, string clrVersion, IEnumerable<string> externals);
        bool RegisterAssembly(Assembly assembly, string clrVersion);
        void PutAssembly(Assembly assembly, string clrVersion);
        int GetComponentLocalRevision(string assemblyName);
        int GetComponentRemoteRevision(string assemblyName);
    }
}